package jkoa.middleware;

import java.util.function.Consumer;

import jkoa.core.Context;
import jkoa.core.Middleware;
import jkoa.core.Next;
import jkoa.core.Request;
import jkoa.core.Response;

/**
 * 在这个扩展的错误处理中间件中，根据错误的类型设置不同的响应状态码和消息。如果错误是IllegalArgumentException，则设置状态码为 400
 * 并返回 “Bad Request” 消息；如果是RuntimeException，则设置状态码为 500 并返回 “Internal Server
 * Error” 消息；对于其他类型的错误，设置状态码为 500 并返回 “Unknown Error” 消息。
 */
public class ErrorHandlingMiddleware implements Middleware {

	public void handle(Context ctx, Next next, Throwable error) {
		if (error == null) {
			next.execute(ctx);
			return;
		}

		if (error instanceof IllegalArgumentException) {
			ctx.response.setStatusCode(400);
			ctx.response.setBody("Bad Request");
		} else if (error instanceof RuntimeException) {
			ctx.response.setStatusCode(500);
			ctx.response.setBody("Internal Server Error");
		} else {
			ctx.response.setStatusCode(500);
			ctx.response.setBody("Unknown Error");
		}
	}


	@Override
	public void handle(Context ctx, Next next) {
		
	}

}
